package com.ddhcodeduck.common.exception;

import lombok.Getter;

@Getter
public enum ErrorCode {

    // 0xxx: 成功和通用错误
    SUCCESS(0, "ok"),


    // 4xxx: 客户端错误
    NOT_LOGIN_ERROR(40100, "未登录"),
    NO_AUTH_ERROR(40101, "无权限"),
    NOT_FOUND_ERROR(40400, "请求数据不存在"),
    FORBIDDEN_ERROR(40300, "禁止访问"),
    UNAUTHORIZED_OPERATION(40301, "无权限执行此操作"),
    RESOURCE_NOT_FOUND(40401, "资源不存在"),

    // 5xxx: 服务器错误
    SYSTEM_ERROR(50000, "系统内部异常"),
    OPERATION_ERROR(50001, "操作失败"),
    DATA_CONVERSION_ERROR(50003, "数据转换异常"),

    // 6xxx: 用户状态码
    USER_EXIST_ERROR(60002, "用户已存在"),
    USERNAME_EMPTY_ERROR(60002, "用户名不能为空"),
    PASSWORD_EMPTY_ERROR(60003, "密码不能为空"),
    USER_NOT_FOUND_ERROR(60005, "用户不存在"),
    PASSWORD_ERROR(60007, "密码错误"),
    // 无效token，拒绝连接
    TOKEN_INVALID_ERROR(60008, "无效的token"),
    // 缺少 token，拒绝连接
    TOKEN_MISSING_ERROR(60009, "缺少token"),

    // 7xxx: 标签状态码
    TAG_NOT_FOUND_ERROR(70001, "标签不存在"),
    //该标签下有题目分类，不能删除
    TAG_HAS_QUESTION_CATEGORY_ERROR(70002, "该标签下有题目分类，不能删除"),

    // 8xxx: 文件上传状态码
    FILE_UPLOAD_ERROR(80001, "文件上传失败"),
    FILE_NOT_FOUND_ERROR(80002, "文件不存在"),
    FILE_ORIGINAL_NAME_EMPTY_ERROR(80003, "文件原始名称为空"),

    // 9xxx: 题目状态码
    QUESTION_DIFFICULTY_EMPTY_ERROR(90001, "题目难度类型为空"),
    QUESTION_DIFFICULTY_NOT_FOUND_ERROR(90002, "改题目难度类型在字典中不存在"),
    QUESTION_NOT_TAG_ERROR(90003, "改题目没有对应关联标签"),
    QUESTION_TYPE_EMPTY_ERROR(90004, "字典中题目类型选项为空"),
    QUESTION_TAG_EMPTY_ERROR(90005, "题目标签不能为空"),
    QUESTION_TAG_NOT_SECOND_LEVEL_ERROR(90006, "题目标签必须是二级标签"),
    QUESTION_TAG_NOT_FIRST_LEVEL_ERROR(90007, "题目标签必须是一级标签"),

    //题目分类  10xxxx
    //标签id不能为空
    TAG_ID_NOT_NULL_ERROR(100001, "标签id不能为空"),

    // 11xxx: WebSocket状态码
    // 请发送有效的 JSON 数据
    WEBSOCKET_JSON_ERROR(110001, "请发送有效的 JSON 数据"),
    // 消息类型不正确
    WEBSOCKET_TYPE_ERROR(110002, "消息类型不正确"),

    // 文件模块 12xxx
    FILE_EMPTY_ERROR(120001, "上传文件不能为空"),
    ;




    /**
     * 状态码
     */
    private final int code;

    /**
     * 信息
     */
    private final String message;

    ErrorCode(int code, String message) {
        this.code = code;
        this.message = message;
    }
}
